package xkp.lesson4;

import xkp.lesson2.UserInfo;

import java.util.*;

public class TestHashMap {
    public static void main(String[] args) {
        //1、如果想要明白HashSet，必须彻底搞懂HashMap的顶底层源码
        //2、HashMap是面试的时候离不开的话题
        //3、重要

        //Map中文意思为映射,在Map的具体对象中存储的是键值对

        //HashMap是Map体系中的内容
        //HashMap<K,V>    K--代表键的数据类型 V--代表值的类型
        HashMap<String,UserInfo> hashMap = new HashMap<>();
        UserInfo userInfo = new UserInfo(20,"张三");
        hashMap.put("user1",userInfo);
        hashMap.put("user2",new UserInfo(22,"李四"));
        //在put时如果键一样，则后面覆盖前面的内容
        //注意：Map中key值不能重复
        //HashMap中的key本质上是以HashSet的形式存储
        hashMap.put("user2",new UserInfo(22,"李四"));
        System.out.println(hashMap.size());
        System.out.println(hashMap);
        //hashMap.remove("user2");
       // UserInfo userInfo = hashMap.get("user1");
        //Map的迭代
        //获取所有的key值
        System.out.println("**********************************");
        //先获取key的集合，通过key遍历value
        Set<String> keySet = hashMap.keySet();
        for(String key:keySet){
            System.out.println(key+":"+hashMap.get(key));
        }

        System.out.println("**********************************");
        //该种遍历方式相对比较麻烦，大家多多练习
        Iterator<Map.Entry<String,UserInfo>> iterator =  hashMap.entrySet().iterator();
        while(iterator.hasNext()){
            Map.Entry<String,UserInfo> entry = iterator.next();
            System.out.println(entry.getKey()+":"+entry.getValue());
        }
        //HashMap底层源码是在整个泛型集合框架中最重要的部分
        //HashMap中存储的数据(键值对)是无序的
        //HashMap底层数据结构
        //HashMap是以键值对存储数据
        //在HashMap底层有一个数组,数组中的元素最开始是单向链表
        //在链表中存储HashCode值(key)一致的数据
        LinkedHashMap<String,Object> linkedHashMap = new LinkedHashMap<>();
        linkedHashMap.put("111","111");
    }
}
